1 /** 
2  * This file is a base for communication between client-server.
3  * Since that happens, structures inside that file should be shared by being implemented on the server, and the client
4  * will be able to interpret the data correctly.
5  */
6 module hip.api.net.server;
7 public import hip.api.net.hipnet;
8 
9 
10 struct ConnectedClient
11 {
12 	NetConnectInfo connInfo;
13 }
14 
15 /**
16  * Whenever the client makes a request for the server on the connected clients, that is the structure that should be returned.
17  */
18 pragma(LDC_no_typeinfo)
19 struct ConnectedClientsResponse
20 {
21 	ConnectedClient[] clients;
22 }
23 
24 enum AcceptResponse
25 {
26 	///Used when the usage is not valid. Currently, when on a request
27 	request,
28 	no,
29 	yes
30 }
31 
32 /**
33  * This is a common struct to return whenever someone is asking to connect
34  */
35 align(1)
36 struct ConnectToClientResponse
37 {
38 	uint connectionRequester;
39 	///When it is a request, this response is invalid. It then should return a yes/no response
40 	AcceptResponse response;
41 }
42 
43 ubyte[] getNetworkFormattedData(MarkedNetReservedTypes code)
44 {
45 	import hip.api.net.utils;
46 	NetHeader header = NetHeader(MarkedNetReservedTypes.sizeof, NetDataType.binary);
47 	return toNetworkBytes(toBytes(header, code));
48 }
49 
50 
51 ubyte[] getNetworkFormattedData(T)(T data, MarkedNetReservedTypes code)
52 {
53 	import hip.api.net.utils;
54 	import std.traits:isDynamicArray;
55 
56 	uint size = getSendTypeSize(data) + cast(uint)ubyte.sizeof;
57 
58 	static if(is(T == string))
59 	{
60 		NetHeader header = NetHeader(size, NetDataType.text);
61 	}
62 	else
63 	{
64 		static if(isDynamicArray!T)
65 		{
66 			NetHeader header = NetHeader(size, NetDataType.binary);
67 		}
68 		else
69 		{
70 			NetHeader header = NetHeader(size, NetDataType.binary);
71 		}
72 	}
73 
74 
75 	return toNetworkBytes(toBytes(header, data, code));
76 }